<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <title>EPICS Base Release 3.13.11</title>
</head>

<body lang="en">
<h1>EPICS Release 3.13.11</h1>

<h3>drvTS</h3>

<p>The code for synchronizing a time master with NTP has been greatly
revised. It should now synchronize to NTP within about .01 seconds.. In
addition the out of sync error messages from the clients can be suppressed.
The following new vxWorks shell command is available:</p>
<pre>    TSsetSyncReportThreshold(syncMilliseconds,syncUnixMilliseconds)</pre>
where
<ul>
  <li>syncMilliseconds
    <p>error reporting threshold in milliseconds for normal UDP broadcast
    synchronization messages from master to clients. The default is 0, i.e.
    report all out of sync events.</p>
  </li>
  <li>syncUnixMilliseconds
    <p>Error reporting threshols in milliseconds for synchronization message
    after a TSsetClockFromUnix command has been given to the master. The
    default is 10 millliseconds.</p>
  </li>
</ul>
<p>This command can be issued on the master and on clients. The value the
client uses is the maximum of the master and client values. For example
if syncUnixMilliseconds is 0 on the master and 10 on the client than the
syncUnixMilliseconds is 10 milliseconds.</p>
<p>If a client is not changed it will also resync closer to NTP but out
of sync message can not be suppressed.</p>

<h2>Changes since 3.13.10</h2>

<h3>dbAccess DBR_ENUM_STRS for field DTYP</h3>

<p>Data Base Request Option DBR_ENUM_STRS for the DTYP field of soft records
does not report failure. It may cause a task to crash on some board suppot
packages.</p>

<h2>Changes since 3.13.9</h2>

<h3>GPL Violation fixed</h3>

<p>The GNU version of getopt.c that was being included in the Win32 version
of libCom was replaced with a BSD version.</p>

<h3>db_access - conversion of double to float</h3>

<p>When a CA user asked for display or control limits as a float a 0 value
was returned as -1.17549435E-38. This is now fixed.</p>

<h3>seq_ca</h3>

<p>The sequencer did not properly keep track of number of channels connected.
It now checks if it is actually connected/disconnect before it
increments/decrements the counts.</p>

<h3>Device Support code</h3>

<p>Several device support files have been removed that were not being built
by default, some of which would not compile anyway.  These are:</p>
<ul>
  <li>The DG535 GPIB support is in the APS/ASD share and has also been
    converted to 3.14</li>
  <li>devVmic2534.c and drvVmic2534.c</li>
  <li>devXxBugRac.c</li>
  <li>devXxDig500Msg232.c</li>
  <li>devXxHvpsGpib.c</li>
  <li>devXxSoftMsg.c</li>
  <li>drvBitBus was unbundled many releases ago, but some header files are
    still required to compile drvGpib which have been cleaned up.</li>
  <li>drvXy010.c</li>
</ul>

<h3>Access Security</h3>

<p>The access security configuration rules now accept quoted strings where
just names were allowed previously.</p>

<p>A new shell command "ascar(int level)" is now available. It produces a
report of the INP channel access connections. Level (0,1,2) produces (a
summary report, summary plus unconnected channels, summary plus report of all
channels)</p>

<h3>mbboRecord and mbbiRecord</h3>

<p>The fields ZRST,...,FFST are now special(SPC_MOD). init_record now checks
to see if state strings or values are defined during pass 0. Previously if
another record had a DBR_STRING link to an mbboRecord it thought the field
was a USHORT instead of an ENUM.</p>

<h3>Channel Access</h3>
<ul>
  <li>Fixed CA server send thread freeze when socket library returns ENOBUFS
    (system is low on network buffers).</li>
  <li>Fixed raw use of fork() system call when spawning CA repeater and it is
    not in the path.</li>
</ul>

<h2>Changes since 3.13.8</h2>

<h3>Fixed dbExpand problem</h3>

<p>A syntax error in an xxInclude.dbd file is now noticed - make stops before
creating the relevent output file.</p>

<h3>Enhanced vxStats device support</h3>

<p>Incorporated various changes to the vxStats device support by Andy Foster
that have been in use at APS for over a year. This version adds the ability
to see absolute memory use in addition to the percentage figures available
before, and also gives information on the number of file desciptors in use.
These new figures use the longin record type, thus a new device support entry
is provided in base.dbd to enable it. See the comments in
<tt>src/dev/vxStatsDev/devVXStats.c</tt> for more detail on the new
facilities and an example database.</p>

<h3>double scanPeriod(int scan)</h3>

<p>A new routine is available from dbScan.h that returns the scan period in
seconds for a particular scan enumeration value.</p>

<h3>calcRecord and calcoutRecord</h3>

<p>Previously if a dbGetLink failed on one of the input links, dbGetLink was
not called for the remaining links. Now it is.</p>

<h3>put notify</h3>

<p>put notify did not act properly if a record had disp=TRUE, i.e. if puts
are disabled. It now returns S_db_putDisabled.</p>

<h3>Close-On-Exec flag set for all sockets created in EPICS base</h3>

<p>On POSIX systsems if a Channel Access application spawns off 3rd party
software with an exec() call then all open file desriptors are inherited
unless the close-on-exec flag is set for each file descriptor. A new wrapper
function was created so that all sockets created in EPICS base will have the
close-on-exec flag set on POSIX systems. The function which spawns the CA
repeater with exec() used to close all open files except stdin/stdout/stderr.
This step was no longer required and therefore was removed from the code.</p>

<h3>Assert fail in CA libraries when system runs low on mbufs</h3>

<h4>Scope</h4>

<p>The bug exists in probably in all previous versions of EPICS.</p>

<h4>Symptoms</h4>

<p>An IOC, low on network buffers, prints a message about an assert failure.
The assert failure can cause the CA server or the CA client library to be
compromised depending on where in the code it occurs.</p>

<h4>Fix</h4>

<p>All calls to getpeername() and getsockname() were checked and fixed as
necessary to make certain that an assert() failure does not occur if failure
status is returned, and that a proper response is made to this off-normal
situation.</p>

<h3>IP kernel deadlock vulnerability occurring when vxWorks's tNetTask calls
logMsg because of a transient mbuf starvation</h3>

<h4>Scope</h4>

<p>You must be running the logClient and logging to an iocLogServer and also
temporarily run the IOC out of network buffers.</p>

<h4>Symptoms</h4>

<p>IP kernel locks up during a transient mbuf starvation situation. No
network communication.</p>

<h4>Fix</h4>

<p>The fix was to not call logFdAdd for the log client's socket and instead
create a specialized vxWorks device driver which calls errlogPrintf for each
incoming message and then call logFdAdd for a file descriptor opened with
that device driver. The desirable functional change being errlogPrintf's
capability to discard messages when it gets behind (because of a transient
mbuf starvation situation). The fix also means that any code that calls
errlogAddListener, e.g. CMLOG, will now receive the logMsg messages.</p>

<h3>Revised Search Message Minimum Period Reset Values</h3>

<p>The CA client library's disconnected channel search message minimum period
now resets to a higher value if a channel disconnects or if a server beacon
anomaly is seen. Up until this release the R3.13 behavior was to reset to the
same search message interval used when a channel was created. The new
behavior is closer to what is implemented in EPICS R3.14.</p>

<h3>macLib</h3>

<p>macParseDefns did not check for handle==NULL. The documentation for
macParseDefns was not correct.</p>

<h3>task_params.h</h3>

<p>"event task" changed tp "event_task".</p>

<h3>drvGpib</h3>

<p>Remove some dead code. Clean up code for handling A24 DMA memory.</p>

<h3>dbGetLink and dbPutLink</h3>

<p>A bug in dbGetLink resulted in nRequest not being given the value 0 if the
link is a constant link. This in turn caused the waveform record to always
set NORD=NELEM. Thus if an application trys to write a waveform via the
steps:</p>
<pre>    prset-&gt;get_array_info(paddr,&amp;no_elements,&amp;offset);
    write nNew elements into array &gt;&gt;
    prset-&gt;put_array_info(paddr,nNew);</pre>

<p>This sets NORD = nNew. But because of the dbGetLink bug, the soft device
support attached to the waveform record sets NORD to NELM.</p>

<p>This problem is fixed. The actual bug was in macros in dbAccess.h</p>

<h2>Changes since 3.13.7</h2>

<h3>dbEvent Bug Fix Changes</h3>

<h4>Scope</h4>

<p>The bug exists in EPICS 3.13.5, 3.13.6, 3.13.7</p>

<h4>Symptoms</h4>

<p>An IOC core CA server thread is found to be using excessive CPU possibly
at elevated priority resulting from vxWorks priority inheritance scheduling.
All attached CA clients will permanently disconnect from the IOC, and record
processing may be disrupted if the threads priority is elevated. Elevated
priority was observed in the one situation where the bug has been reproduced
and identified so far.</p>

<h4>Circumstances Related to Relative Rates of Occurrence</h4>

<p>This bug will occur only in circumstances where the CA client deletes a
monitor subscription and the client's CA event queue in iocCore is 100% full.
Since there is always space for each monitor subscription to place at least
one update on the queue then the queue can only be full if *all*
subscriptions for a particular client are sending subscription update events
at a rate that is faster than the client is reading them. Therefore,
specialized clients that have a small number of regularly updated
subscriptions and that do not regularly call ca_poll() or ca_pend_event() are
more likely to reproduce the problem.</p>

<h3>Config Changes</h3>
<ul>
  <li>The default for vxWorks targets is now null, i.e.
    CROSS_COMPILER_TARGET_ARCHS in CONFIG_SITE must be modified.</li>
  <li>Added support for vxWorks targets: ppc603_long, ppc604_long, and
    sbs_pc6.</li>
  <li>Added support for HOST_ARCH solarisGnu (solaris host using GNU
    compilers)</li>
  <li>Added rule to create javadoc html files if makefile contains
    JAVADOC=YES.</li>
  <li>Removed -lXext -lX libraries from link edit lines on solaris
  builds.</li>
  <li>Simplified CONFIG.Host.solaris-x86 and RULES.Host config files.</li>
</ul>

<h2>Changes since 3.13.6</h2>

<p><strong>IOC resident CA server</strong></p>
<ul>
  <li>put callback failure
    <p><em>Symptom</em>:  IOCs  produce unexpected "ca put callback timeout"
    messages, and may also crash.</p>
    <p><em>Scope</em>: The bug is present only in the IOC resident CA server.
    It was introduced in R3.13.6, and will be more likely to occur when there
    is a particularly heavy Channel Access put callback load.</p>
  </li>
</ul>

<p><strong>dbCommon.dbd</strong></p>

<p>UDF how has a promptgroup. This allows database configuration tools to
mset UDF false.</p>

<p><strong>mbboRecord</strong></p>

<p>Field VAL now has a cvt_dbaddr method. If any state strings are defined
the field type and dbr_field_type are declared ENUM. If no state strings are
defined then the type is USHORT. Previously the types were always ENUM.</p>

<p><strong>camacDev</strong></p>

<p>ai and ao now support special_linconv. NOTE: NOT TESTED.</p>

<p><strong>drvGpib.c</strong></p>

<p>Add some cacheFlush statements</p>

<p><strong>aiRecord and aoRecord: Setting eoff=egul</strong></p>

<p>Instead of init_record executing code like</p>
<pre>    if ((pai-&gt;linr == menuConvertLINEAR) &amp;&amp; pdset-&gt;special_linconv) {
        pai-&gt;eoff = pai-&gt;egul;
    }</pre>

<p>It now executes:</p>
<pre>    if ((pai-&gt;eslo==1.0) &amp;&amp; (pai-&gt;eoff==0.0)) {
        pai-&gt;eoff = pai-&gt;egul;
    }</pre>

<p>aoRecord has a similar change</p>

<p>This was done so that old device support which does not implement
special_linconv still works.</p>

<p><strong>CA puts to disabled record</strong></p>

<p>If a CA client issues a put to a disabled record then, when the record is
enabled, database puts to the record will not make the record process until a
CA put is again issued. This is fixed</p>

<p><strong>dbb - database breakpoints</strong></p>

<p>The database breakpoint facility was not working. This has probably been
true for several releases. It is now fixed.</p>

<p><strong>TPRO - trace processing</strong></p>

<p>If dbProcess is called recursively by different tasks, it did not properly
handle TPRO. Consider the following database:</p>
<pre>record(ao,"mrkao") {
    field(OUT,"mrkai CA")
    field(TPRO,"1")
}
record(ai,"mrkai") {
    field(TPRO,"1")
}</pre>

<p>If a channel access put is sent to mrkao, no message is issued when mrkai
is processed.</p>

<p>This is now fixed.</p>

<p><strong>TSconfigure</strong></p>

<p>If in your st.cmd file you issue the command.</p>

<p>TSconfigure(0,0,0,0,0,0,1)</p>

<p>And set the TSE field of any record to a non zero value, then a crash will
occur when recGblGetTimeStamp is called.</p>

<p>This is now fixed.</p>

<p><strong>calcoutRecord</strong></p>

<p>nsev not sevr must be checked to decide if dbPutLink should be called.</p>

<p>This is now fixed</p>

<p><strong>calcPerform</strong></p>

<p>This now returns a non zero value if the result is nan (not a number).</p>

<p><strong>dbCa</strong></p>

<p>Improved diagnostic message.</p>

<p><strong>CA server (rsrv)</strong></p>

<p>Fixed race condition occuring when a put notify is canceled by a
ca_clear_channel at the same instant that it completes. This problem was
introduced in R3.13.5.</p>

<h2>Changes since 3.13.5</h2>

<p><strong>dbNotify</strong></p>

<p>If a request was made to restart a putNotify but another putNotify started
before it, then it was put on the restartList twice. This resulted in the
cbLow task getting into an infinite loop.</p>

<p><strong>dbConvert and dbFastLinkConv</strong></p>

<p>When a double precision 0 is converted to a float, instead of 0 the float
value becomes -FLT_MIN, which is a very small ,value, e.g. -1.175494e-38.</p>

<p><b>iocInit and initHooks</b></p>

<p>initialProcess is now called before interruptAccept. This means that
initial processing will be done before periodically scanned and I/O Inter
scanned record s start processing. This also changed the order of two of the
steps in initHooks.h</p>

<p><strong>drvBitBus</strong></p>

<p>A check is made that Irqvector is a multiple of 4.</p>

<p><b>dbCa.c</b></p>

<p>dbCaGetLink must return -1 when settinf sevr to INVALID or a FPE may be
rasied on a powerPC.</p>

<p><b>devMbboDirectCamac&gt;/b&gt;</b></p>

<p>The call to cfsa was passing val as an argument. It is changed to rval.
See tech-talk message from Noboru Yamamoto Nov 2001.</p>

<p><b>mbbiRecord</b></p>

<p>All existing manipulations of UDF in process() are removed and one udf is
set FALSE when the raw value is successfully read.</p>

<p><b>selRecord</b></p>

<p>In do_sel udf is not set false at the beginning. If selm has an invalid
value recGblSetSevr(psel,SOFT_ALARM,MAJOR_ALARM) is called.</p>

<p><strong>devMz8310</strong></p>

<p>Changes were made so that this works on the powerPC. Improved IACK
code.</p>

<p><strong>CA Client Library</strong></p>
<ul>
  <li>Monitor Subscription Attached to In-Memory Unsigned Short PV Anomaly
    <p><em>Symptom:</em></p>
    <p>A database field contiguous to a database field in the with an
    unsigned integer type is mysteriously damaged.</p>
    <p><em>Scope:</em></p>
    <p>Almost all recent EPICS versions that promote the native type of
    unsigned database fields to the next larger integer or floating point
    type, because Channel Access clients use only signed types, are
    effected.</p>
    <p>The problem is further restricted only to Channel Access clients that
    run within a vxWorks IOC communicating with local database fields stored
    in some unsigned integer type.</p>
    <p>Furthermore, the CA client must enter a subscription with an external
    type that is identical to the CA "native" type only when the CA "native"
    type is promoted to some larger signed type from the fields unsigned
    integer field type.</p>
    <p>The majority of EPICS users use only two CA client programs that
    attach to local in-memory process variables: The sequencer and the CA
    based database links. Both of these clients install monitor subscriptions
    that include timestamp and or alarm information. Therefore, they do not
    monitor in a native promoted type as described above, and are not
    involved.</p>
  </li>
</ul>

<p><strong>IOC Resident CA Server</strong></p>
<ul>
  <li>Missing First Monitor Subscription Update
    <p><em>Symptom:</em></p>
    <p>A Channel Access client, such as medm, does not receive its first
    monitor subscription update. An "events lost" message will show up on the
    IOC's console, and in the log server.</p>
    <p><em>Scope:</em></p>
    <p>EPICS R3.13.5 based IOCs only.</p>
    <p>A client must issue a large number of monitor subscription install
    requests immediately after a large number of monitor subscription
    uninstall requests.</p>
    <p>This problem was discovered during regression testing of EPICS
    R3.14.</p>
  </li>
</ul>
<ul>
  <li>Client Disconnect or Channel Delete While Put Callback in Progress
    Failure
    <p><em>Symptom:</em></p>
    <p>The channel access server prints messages about a corrupt semaphore or
    a bad file descriptor when a client forces a disconnect before its put
    callback request completes.</p>
    <p><em>Scope:</em></p>
    <p>This bug has probably existed in every version of EPICS supporting put
    callback requests. The problem may have been benign until the client
    disconnect monitor cleanup code became more efficent in EPICS R3.13.5.
    The problem was detected only on power PC systems. A similar problem
    potentially occuring when a channel is deleted before its put callback
    request completes was also fixed.</p>
  </li>
</ul>

<h2>Changes since 3.13.4</h2>

<p><b>convertRelease and checkRelease</b></p>

<p>New applications created with makeBaseApp.pl now have the functionality of
the makeConfigAppInclude.pl and makeIocCdCommands.pl scripts combined into a
single convertRelease.pl script.</p>

<p>The new script also provides consistency checking of the entries in the
config/RELEASE file, so that gnumake will stop with an error report if a
definition in any other &lt;supporttop&amp;gt/config/RELEASE file is
different to the same definition in this application.  This checking can be
disabled by editing config/Makefile.Host.</p>

<p>Applications created using earlier versions of EPICS will continue to work
as before and will not benefit from the consistency check functionality.</p>

<p><b>devAiSoftRaw and devAoSoftRaw</b></p>

<p>ai and ao records using DTYP="Raw Soft Channel" can have their EOFF and
ESLO fields set manually at design or run-time, and these values will be used
when LINR=LINEAR.  The same applies to any device support that doesn't
provide a special_linconv() routine; if special_linconv() is provided
however, the original behaviour occurs (EOFF is set to EGUL and ESLO is
calculated by that routine).  The ESLO and EOFF fields now have CA monitors
posted if their value is changed by the special_linconv() routine.</p>

<p><b>cac_recv_task</b></p>

<p>Increased stack size from 4096 to 819l.</p>

<p><b>drvTS</b></p>

<p>Now uses osiSock for to handle implementation diffences</p>

<p><b>Constant Links</b></p>

<p>Hex and octal constants are now accepted for constant links.
recGblInitConstantLink uses %i instead of %u for unsigned types. This is so
that hex constants are accepted. %u does not accept hex. dbPutString makes a
link constant if either strtod or strtol eats entire string. Previously only
strtod was used.</p>

<p><b>Breakpoint tables</b></p>

<p>A bug that caused an invalid conversion when the raw value is greater than
the maximum table value is fixed. If the raw value is outside the table, the
aiRecord and aoRecord now specify a severity of MAJOR_ALARM instead of
INVALID_ALARM.</p>

<p><b>VAL field a promptgroup</b></p>

<p>The VAL field of the following recordtypes can now be given values by
database configuration tools: aiRecord, aoRecord, biRecord, boRecord,
calcoutRecord, longinRecord, longoutRecord, mbbiDirectRecord, mbbiRecord,
mbboDirectRecord, mbboRecord.</p>

<p>Several of the changes have been made to help prevent exceptions on
powerPcs when conversions are made from float to double.</p>

<p><strong>CA Server Bug</strong></p>

<p>Symptoms:</p>

<p>Clients disconnect unexpectedly when canceling event (monitor)
subscriptions using ca_clear_event(), but this may not be noticed because the
problem is probably rare under low or moderate load, and because CA clients
automatically  reconnect. The problem was only reproducible here under heavy
load presented when the R3.14 client side regression tests were  run on a
fast Linux workstation. For example, when the tests  were run on a 500 MHz NT
host I was unable to reproduce the bug.  On vxWorks you may see threads with
the name "CA client" and also  "CA event" even if there are no clients
connected (the casr  diagnostic will also incorrectly report that clients are
connected). As the IOC stays in long term operation without a reboot, and
depending on the frequency of occurrence at your site (if any), you  may also
notice that memory and file descriptors have been lost.</p>

<p>Background:</p>

<p>The problem was discovered when regression testing EPICS R3.14. The cause
was a deadlock occurring when a CA event (monitor) subscription was canceled
when the CA circuit was simultaneously in event (monitor) flow control mode
and the event (monitor) subscription also had a corresponding update in the
queue.</p>

<p><br>
<strong>PPC float to double exceptions</strong></p>

<p>Several of the changes have been made to help prevent exceptions on
powerPcs when conversions are made from float to double.</p>

<p><b>aaiRecord aaoRecord aiRecord aoRecord boRecord calcRecord calcoutRecord
compressRecord dfanoutRecord egeventRecord selRecord subArrayRecord
subRecordwaveformRecord</b></p>

<p>All DBF_FLOAT fields have been replaced by DBF_DOUBLE</p>

<p><b>dbConvert dbFastLinkConv db_access</b></p>

<p>Conversion from double to float checks for exponent too large.</p>

<p><b>dfanoutRecord.c longoutRecord.c stringoutRecord.c</b></p>

<p>OMSL did not work correctly for constant links. <br>
<br>
<b>compressRecord</b></p>

<p>READ_ALARM changed to LINK_ALARM <br>
<b>Database Channel Access Links</b></p>

<p>A message was sent to errlog whenever the connection to the server was
lost. This message is no longer generated.</p>

<p><b>drvEpvxi</b></p>

<p>National Instruments MXI-2 devices are now fully supported on both 68K and
PowerPC (the PowerPC BSP must provide code for the vxWorks intVecGet()
routine though).  PowerPC CPUs that have a Universe VME interface chip will
have problems driving MXI-1 boards, although they can be made to do so by
setting the variable 'vxi_use_failed_mxi' to a non-zero value in the st.cmd
file before iocInit() and ignoring any warnings about the MXI-1 board having
failed its self-test.</p>

<p>If a VME-MXI-2 board will not be installed as the VME system controller
read the NOTES: towards the top of the driver source for an essential
warning.</p>

<p>There is special code for the National Instruments CPU030 board in this
file, which is now only included when compiling for that particular CPU board
(an entry in config/CONFIG.Vx.niCpu030 enables this).</p>

<p><b>Put Notify</b></p>

<p>A bug in dbNotifyCancel could cause a problem if a channel access client
disconnects while put notifys are outstanding.</p>

<p><b>dbAccess</b></p>

<p>A bug was fixed that was related to dynamically changing lock sets.</p>

<p>The record support put_array_info is called after the a put only if the
put is successful. Previosuly it was always called.</p>

<p><b>breakpoint tables</b></p>

<p>Breakpoint values are doubles rather than floats.</p>

<p><b>devVXStats</b></p>

<p>Improved algorithm for cpuUsage</p>

<h2>Changes since 3.13.3</h2>
<b>Channel Access</b><b></b>

<p>Symptom: CA clients on all versions of EPICS with unresolved&nbsp;
channels broadcast search messages too frequently if an EPICS R3.13.3 server
is present. This bug does not occur if an R3.13.3 server is not present.</p>

<p>Changed: CA server now sends beacon messages which uniquely&nbsp; identify
the server address. The CA repeater was also upgraded to detect, and fix, any
problems of this nature.</p>

<p>Symptom: Undefined symbols show up when EPICS R3.13.3 was loaded&nbsp;
into a PC IOC running Tornado II.</p>

<p>Changed: Conditionally compiled out references to architecture
inappropriate system calls. <br>
&nbsp;</p>

<p><b>dfanoutRecord</b> <br>
&nbsp;</p>
<ul>
  <li>VAL and all related fields are now DBF_DOUBLE instead of DBF_LONG</li>
  <li>SELM, SELN, and SELL are now available. They have same semantics as for
    fanout record</li>
  <li>PREC is now supported.</li>
  <li>IVOA and IVOV are no longer present. The record support never used
  them.</li>
</ul>
<b>longinRecord and longoutRecord</b>

<p>These did not properly set monitors when delta=0x80000000. This happened
when the record was attached to a 32 bit digital device .</p>

<p><b>Access Security TrapWrite feature</b></p>

<p>Access security now provides the ability to trap write requests coming
from a client. RULEs in the access configuration files accept an option
argument NOTRAPWRITE or TRAPWRITE. For example:</p>
<pre>RULE(1,WRITE,TRAPWRITE)</pre>
If the additional argument is not specified the default is NOTRAPWRITE.

<p>The purpose of this new facility is to allow things like logging Channel
Access writes. Epics base itself does not provide this ability but only the
hook needed by such a facility. DESY has developed a facility that logs CA
puts. The trap writes feacure allows the DESY facility to be implemented
without any changes to epics base. In addition it allows the user to decide
what should be logged.</p>

<p>This new facility will be described in more detail in the 3.14 version of
the Application Developer's Guide.</p>

<p><b>dbAccess</b></p>

<p>When obtaining graphic, control, and alarm limits, the destination values
were not initialized. If record support did not set values then the
unitialized values were returned. This caused exceptions to occut on
powerPCs. The values are now initialized to 0.</p>

<p><b>drvTS.c</b> <br>
&nbsp;</p>
<ul>
  <li>Fixed TSgetMasterTime() bug - round-trip adjustment was garbage</li>
  <li>Replaced TSprintf() with printf() where logging inappropriate</li>
</ul>

<h2>Changes since 3.13.2</h2>
<b>Build Changes</b> <br>
&nbsp; 
<ul>
  <li>Base no longer requires the INC step. Formerly this was the first step
    of build. It installed header files.&nbsp; By default this step is no
    longer executed. If your applications need this step then in
    base/config/CONFIG_SITE (for all applications) or
    &lt;apptop&gt;/config/CONFIG (for individual
    applications)/CONFIG_SITE&nbsp; provide the following definition</li>

  <p><br>
  MAKE_INC_TARGET_FIRST=YES</p>

  <p><b>NOTE: If your applications relies on header files being installed as
  the first step of building, you should reorganize the order of
  building.&nbsp; The 3.14 releases of base will no longer support the INC
  step.</b></p>
</ul>
<ul>
  <li>Support has been added for the Borland C++ compiler on windows
    installed header files</li>
</ul>

<p><br>
<b>Channel Access Changes</b></p>

<p>Fixed the RISC architecture specific problem in iocCore which results in
an intermittent and infrequent assert failure with this message: "assert
(ev_que-&gt;evUser-&gt;nDuplicates&gt;=1u)". This was actually fixed in
release 3.13.2.</p>

<p>All structure members with names "m_type" were changed to "m_dataType" to
avoid a macro name compile time conflict present in the SENS IP kernel
supplied with Tornado II and optionally in Tornado I.</p>

<p>The network interface query code used by Channel Access to auto-configure
its address list was modified to be compatible with changed API's present in
the SENS IP&nbsp; kernel supplied with Tornado II and optionally inTornado
I.</p>

<p><b>DBR_PUT_ACKT and DBR_PUT_ACKS</b></p>

<p>This now works for ca_put_callback as well as ca_put.</p>

<p><b>Spaces in task names</b></p>

<p>Task names no longer have any blanks</p>

<p><b>tsLib.h</b></p>

<p>Made tsStampFromLocal and tsStampToLocal public rather than private.</p>

<p><b>dbAccess</b></p>

<p>The following new routines have been added.</p>

<blockquote>
  dbGetControlLimits <br>
  dbGetGraphicLimits <br>
  dbGetAlarmLimits <br>
  dbGetPrecision <br>
  dbGetUnits <br>
  dbGetNelements <br>
  dbGetSevr <br>
  dbGetTimeStamp</blockquote>
<b>menuAlarmStat.dbd</b>

<p>choice(menuAlarmStat,"NO_ALARM")</p>

<p>is changed to</p>

<p>choice(menuAlarmStatNO_ALARM,"NO_ALARM")</p>

<p><b>recGblResetAlarms</b></p>

<p>a monitor for the STAT field is fired if either the STAT or SEVR changes.
Previously a monotor was fired only if the STAT changes.</p>

<p><b>dbAccess.c</b></p>

<p>In dbPutLinkValue, if the (out)link has MS property, the old severity was
propagated instead of the actual one. This is fixed by calling recGblSetSevr
with NSEV instead of SEVR of the source record.</p>

<p><b>mbboDirectRecord</b></p>
<ul>
  <li>IVOV and IVOA are now fully supported. Behaviour is similar to other
    output record types.</li>
  <li>UDF behaviour is fixed: UDF is now reset after warm reboot, after
    setting any of the BX fields in supervisory mode and after (successful)
    reading from DOL in closed_loop mode. Also, UDF_ALARM is raised if UDF
    has not yet been reset, as with other record types</li>
  <li>LINK / INVALID alarm is raised if reading from DOL fails. This, also,
    is similar to other output records.</li>
</ul>

<p><br>
<b>devVXStats.c</b></p>

<p>The stack size for cpuUsageTask was increased. The precious stack size was
too small for mv172s, which do not have a separate interrupt stack like the
mv167.&nbsp; The same problem may exist on other processors such as the
powerPC.</p>

<p><b>dbel.c</b></p>

<p>It was incorrectly reporting VALUE,&nbsp; ALARM and LOG for all events.</p>

<p><b>longoutRecord</b></p>

<p>Added fields drvl and drvh</p>

<p><b>aiRecord, calcRecord, calcoutRecord, selRecord, and subRecord</b></p>

<p>In alarm the definitions of hihi, high, low, lolo; are changed from float
to double.</p>

<p><b>aoRecord.c</b> <br>
&nbsp;</p>
<ul>
  <li>The convert routine no longer sets udf false. Fetch_value does set udf
    false when it successfully fetched a value. Thus udf is now only set
    false when a new value is obtained.</li>
  <li>RVAL/ROFF conversion: possible range overflow is fixed. convert(
    )&nbsp; uses double arithmetics until the final assignment to RVAL.</li>
</ul>

<p><br>
<b>dfanoutRecord.c</b></p>

<p>A dbPutLink is attempted for all links even if a put for a previous link
fails. If a dbPutLink fails&nbsp;
recGblSetSevr(pdfanout,LINK_ALARM,MAJOR_ALARM) is called.</p>

<p><b>dbStaticLib</b></p>

<p>When dbPutString&nbsp; writes to the VAL field then udf is set false.</p>

<p><b>cvtFast</b></p>

<p>cvtLongToHexString now puts 0x in frount of the number and
cvtLongToOctalString writes a leading 0. <br>
&nbsp;</p>

<h2>Changes since 3.13.1</h2>
<b>tsSubr</b>

<p>There was a bug when converting ascii string format to time stamp. The bug
involved the year 00 appeared in the ascii string</p>

<p><b>Channel Access</b></p>

<p>1) A severe problem where the CA client did not exit a loop sending UDP to
a list of addresses if an error condition was returned from the system call
which sends a UDP frame was fixed. This problem was discovered during load
testing, and will be more likely to occur under heavy network loading
conditions.</p>

<p>2) A problem where the client library could fail and use a deallocated
data structure if a connection dropped while it was waiting to send a message
to a client was fixed.</p>

<p>3) The CA client now maintains a congestion avoidance threshold on UDP
search transmissions similar to the congestion avoidance algorithm employed
by modern version of TCP. There are also some small changes related to how
the search counters are maintained without allowing them to overflow. This
patch was made in R3.13.1 because I originally identified it as the fix for
(1) above, but it turned out to not be the root cause.</p>

<p>4) A bug fix was made for a problem where the CA repeater was inheriting
on HP-UX, and possibly other UNIX systems that are not Solaris, certain open
file descriptors when fork()/exec() are used to start the CA repeater.</p>

<p>5) Changes that allow CA to work on Microsoft Visual C++ 6.0 (which
includes a new win sock DLL and some changes in esoteric parts of the socket
API).</p>

<p>6)  always inform client of "no write access"  for a SPC_NOMOD fields.</p>

<p>7) calls to ca_printf removed from rsrv.</p>

<p>8) prevent UDP daemon from running damaged messages with TCP protocol and
visa-versa</p>

<p>9) use ipAddrToA() so that address print out does not come out byte
swapped on the PC</p>

<p>10) improved debug messages and added diagnostics</p>

<p>11)  don't send an exception to client when bad request received over
UDP.</p>
<br>
&nbsp; 

<p><b>config</b></p>
<ul>
  <li>Many changes.</li>
  <li>Currently gdd and cas are not built.</li>
</ul>
<b>access security</b>

<p>A ca exception handler was added. Thus exceptions will no longer cause the
asCa task to suspend.</p>

<p><b>dbCa</b></p>

<p>A ca exception handler. Thus exceptions no longer cause dbCa task to
suspend.</p>

<p><b>dbScan.c</b></p>

<p>pevent_scan_list-&gt;scan_list.lock was not initialized. Amazingly it did
not cause a crash. Note that the lock is only used when the scan mechanism of
records are dynamically changed.</p>

<p><b>dbCommon.dbd</b> <br>
&nbsp;</p>
<ul>
  <li>several extra definitions were changed from void * to correct struct
    types.</li>
  <li>ACKT was changed so it can be set by database configuration tools.</li>
</ul>

<p><br>
<b>dbStaticLib</b></p>
<ul>
  <li>The DTYP field is always written.</li>
  <li>The NoRun version now keeps record instances keeps all records of each
    type in alphabetical order.</li>
  <li>CALC fields are OK if either postfix or sCalcPostfix returns
  success.</li>
</ul>
<b>breakpoint tables</b>

<p>Tables names were previously forced to be alphanumeric. This restriction
is removed.</p>

<p><b>drvTS.c</b> <br>
&nbsp;</p>
<ul>
  <li>Removed potential infinite recursion from tsForceSoftSync().</li>
  <li>Fixed bug where time sync UDP client was getting in a state where it
    was using the response from the previous request, and ending up setting
    the time 10 seconds back.</li>
</ul>

<p><br>
<b>drvSup.h</b></p>

<p>removed definition for&nbsp; reboot.</p>

<p><b>dbNotify</b></p>

<p>If&nbsp; dbPutNotify called dbProcess and dbProcess returned an error the
notify completion callback was called twice. This bug is fixed.</p>

<p><b>drvBB232</b></p>

<p>This support was defining storage twice. A bug in the current gcc compiler
supplied with tornado does not properl;y compile such code. The extra
definitions are removed.</p>

<p><b>aiRecord</b></p>
<ul>
  <li>eoff was not being reinitialized when conversion related fields were
    dynamically modified.</li>
  <li>hyst and lalm are changed from float to double</li>
</ul>
<b>aoRecord</b>
<ul>
  <li>eoff was not being reinitialized when conversion related fields were
    dynamically modified.</li>
  <li>hyst, lalm, hihi, high, low, lolo all changed from float to double</li>
</ul>
<b>calcRecord&nbsp; calcoutRecord selRecord subRecord</b>

<p>hyst and lalm changed from float to double</p>

<p><b>dfanoutRecord</b></p>

<p>hyst, lalm, hihi, high, low, lolo all changed from float to double</p>

<p><b>compressRecord</b></p>

<p>compressALG_N_to_1_Median (compress keeping median value) added.</p>

<p><b>mbbiDirectRecord</b></p>

<p>When just the record's severity changed, only monitors on the VAL fields
were posted, no monitors on the single bit fields.</p>

<p><b>devApsEr.c</b></p>

<p>ErGetTicks now locks while updating ticks</p>

<p><b>devCommonGpib</b> <br>
&nbsp;</p>
<ul>
  <li>sscanf response now checked to be equal to 1 rather than just not
  zero.</li>
  <li>all mallocs changed to callocs. This is needed for the new unbundled
    bitbus support.</li>
</ul>
<b>drvGpib.c</b>

<p>all mallocs changed to callocs. This is needed for the new unbundled
bitbus support.</p>

<p><b>bitbus support</b></p>

<p>This support is now unbundled. DO NOT use the version in base. This
includes the following</p>
<ul>
  <li>devBBInteract.c</li>
  <li>devBUG.dbd</li>
  <li>devBitbusStats.dbd</li>
  <li>devIObug.c</li>
  <li>drvBB232.c</li>
  <li>drvBB232.h</li>
  <li>drvBitBus.c</li>
  <li>drvBitBus.h</li>
  <li>drvBitBusErr.h</li>
  <li>drvBitBusInterface.h</li>
  <li>drvMsg.c</li>
  <li>drvMsg.h</li>
  <li>drvRs232.h</li>
</ul>
NOTE: drvBitBus.h, drvBitBus.c, drvBitBusInterface.h, and drvBitBusErr.h
appear in both base and unbundled because drvGib uses it.&nbsp; Must be fixed
when gpib is unbundled. 

<p><b>drvBBMsg.c drvBBMsg.c drvRs232.c drvTy232.h</b></p>

<p>Removedfrom base. Seemed to be old duplicate version of drvBB232.c or not
used at all.</p>

<p><b>devXxDig500Msg232.c</b></p>

<p>removed, was replaced by the digitel record type &amp; device support</p>

<p><b>CAN and IPAC</b></p>

<p>This support has been available for some time as an unbundled product. It
is not longer included with base.</p>

<p><b>Allen Bradley</b></p>

<p>The allen bradley support has been available for some time as an unbundled
product. It is not longer included with base.</p>

<p><b>devOpt support</b></p>

<p>The following gpib support modules have been changed to fix compiler bug
for vxWorks 5.3:</p>
<ul>
  <li>devAnalytekGpib.c</li>
  <li>devK486Gpib.c</li>
  <li>devXxDc5009Gpib.c</li>
  <li>devXxDg535Gpib.c</li>
  <li>devXxK196Gpib.c</li>
  <li>devXxK263Gpib.c</li>
  <li>devXxSkeletonGpib.c</li>
  <li>devXxSr620Gpib.c</li>
</ul>
<b>mkdir.pl and rm.pl</b>

<p>&nbsp;getopt() changed to&nbsp; getopt "";</p>

<p><b>rc2.logServer</b></p>

<p>Moved&nbsp; export statements to the right place.</p>

<p><b>access security</b></p>

<p>Issue better error message if access security initialization fails.</p>

<p><b>makeBaseApp</b></p>
<ul>
  <li>makeBaseApp.pl</li>
  <br>
  &nbsp;copy any non-Apps under $top; allow links for apptype directories 
  <ul>
    <li>dbExample2.template</li>
  </ul>
  <br>
  fixed mistake
  <ul>
    <li>makeIocCdCommands.pl</li>
  </ul>
  <br>
  This now looks for all external products in config/RELEASE and generates
  command to cd to product top and product bin.</ul>
<b>calcoutRecord</b>

<p>Under certain conditions (an input link referencing a PV on another ioc
and an unusually long ioc initialization), the calcout record would cause
an&nbsp; error during iocInit by attempting to dbScanLock a record
prematurely. This anomaly has been resolved with this version. No changes to
the functionality of the calcout record were made.</p>

<p><b>dbLoadTemplate</b></p>

<p>Allow pattern with no substitutions.</p>

<p><b>devAaoCamac.c</b></p>

<p>This had an error that prevented it from compiling</p>

<h2>Changes between beta12 and 3.13.1</h2>
<b><tt>iocLogClient</tt></b>

<p>If either of the environment variables EPICS_IOC_LOG_PORT or
EPICS_IOC_LOG_INET are not defined then iocLogDisable is set true, i.e.
logging is disabled. Also in the epics base distribution
EPICS_IOC_LOG_FILE_NAME and EPICS_IOC_LOG_INET are set to null.</p>

<p><b><tt>dbCaGetTimeStamp</tt></b></p>

<p>This is a new routine for database channel access links.</p>

<p><b><tt>drvTS</tt></b></p>

<p>The routine TSsetClockFromUnix was made global. Calling it forces a
resynchronization with a host time server. This is useful to <br>
force a master timing ioc to resynchronize.</p>

<p>Several bugs were fixed. Previously async clients did not sync properly
with a master timing ioc. Also if an async client syncing with a unix/ntp
server got out of sync by &gt; 1 sec then it could get out of sync by 1 to 20
seconds for an indeterminate period of time.</p>

<p><b><tt>task_params.h</tt></b></p>

<p>Task priorities were changed so that no epics task&nbsp; has higher
priority than netTask. Definitions for IOEVENTSCAN and TIMESTAMP were
removed.</p>

<p><b><tt>histogram record</tt></b></p>

<p>Added new field PREC for display of double and float fields ULIM, LLIM,
SDEL, SVAL, SGNL, and WDTH. Added unsigned long fields HOPR and LOPR for
display of VAL array counts.&nbsp; Changed SDEL field from SPC_NOMOD to
SPC_RESET to allow start and stop of the watch dog timer.</p>

<p><b><tt>Sequencer</tt></b></p>

<p>The lex definitions have been changed so that definitions like</p>
<pre>#define ERRVALUE&nbsp; 9.90E+09</pre>

<p><br>
are accepted.</p>

<p>Initial values for static variables are now honored. Previously the syntax
was permitted but the initial value was ignored. <b>Note</b> that initial
values will give a compilation error if the "recursive" option is used
because the assignments are within the body of a struct {} definition; it
seemed worthwhile supporting the syntax for the non-recursive case.</p>

<p><b><tt>devMbbiDirectSoftRaw, devMbbiSoftRaw, devMbboDirectSoftRaw,
devMbboSoftRaw</tt></b> <br>
&nbsp;</p>

<p><tt>SHFT </tt>was made a prompt field and also modifiable.&nbsp; The VAL
field of mbboDirectRecord is now modifiable.</p>

<p>If the fields NOBT and SHFT are given values then this device support will
honor the MASK and SHFT fields just like hardware device support. To keep
compatibilty with old databases, if NOBT is 0 during init_record, mask is set
to the value 0xffffffff. Thus old databases will act like previously
<b>unless</b> the nobt field was set to a non-zero value.</p>

<p><b><tt>calcoutRecord</tt></b></p>

<p>No longer calls dbScanLock until interruptAccept is true.</p>

<p><b><tt>breakpoint tables</tt></b></p>

<p>Entering negative values failed. This bug is fixed.</p>

<p><b><tt>dbl("&lt;record type&gt;","&lt;output file&gt;","&lt;field
list&gt;")</tt></b></p>

<p>The vxWorks console command dbl now allows an additional argument, which
is a list of field names.</p>

<p>For example</p>

<p>iocexample&gt; dbl "ai",0,"DESC SCAN" <br>
mrk:aiExample,"Analog input","Passive" <br>
mrk:aiExample1,"Analog input No. 1","Passive" <br>
mrk:aiExample2,"Analog input No. 2","Passive" <br>
mrk:aiExample3,"Analog input No. 3","Passive" <br>
&nbsp;</p>

<h4>June 15, 1998</h4>
All major functionality that will be in R3.13 is now in place. It has been
build on solaris, sunos, HPUX, alpha, SG, and winXX. This release is still
called a beta release but will become 3.13.1 as soon as it has been used on a
few production systems (bug fixes will be made if necessary)

<p>The Application Developer's Guide is a major revision of the 3.12 edition.
The latest version is for beta12 base release.&nbsp; It is available in pdf
(adobe acrobat reader) and in postscript. The pdf format is nice for online
viewing and postscript for generating a hard copy.</p>

<p>LANL has a revision of the Record Reference Manual available. See the LANL
EPICS documentation.</p>

<p>The document "<a
href="http://www.aps.anl.gov/asd/controls/epics/EpicsDocumentation/AppDevManuals/iocAppBuildSRcontrol3_13_0beta12.html">EPICS
IOC Applications: Building and Source/Release Control</a>" provides guidlines
for developing applications with 3.13.</p>

<h2>Changes between beta11 and beta12</h2>

<h3>IOC Applications: Building</h3>
The following explains changes that need to be made to existing applications
that followed the <a
href="http://www.aps.anl.gov/asd/controls/epics/EpicsDocumentation/AppDevManuals/iocAppBuildSRcontrol3_13_0beta12.html">EPICS
IOC Applications: Building and Source/Release Control</a>. guidelines. See
the new version of this manual for details.

<p>Before switching applications to beta12 it is <b>STRONGLY</b> recommended
that you execute:</p>

<blockquote>
  <pre>cd &lt;top&gt;
gnumake clean uninstall</pre>
</blockquote>

<h4>Changes to &lt;top&gt;/config:</h4>
&nbsp; 
<dl>
  <dt><tt>CONFIG_APP</tt></dt>
    <dd>Remove the following lines:</dd>
</dl>

<blockquote>
  <pre>ifndef T_A
T_A = $(HOST_ARCH)
endif #ifndef T_A</pre>
</blockquote>
<dl>
  <dt><tt>RELEASE</tt></dt>
    <dd>If desired add a definition for <tt>TEMPLATE_TOP</tt></dd>
  <dt><tt>RULES_TOP RULES.Db RULES.ioc RULES.iocBoot</tt></dt>
    <dd>These no longer exists in base.&nbsp; Replace your version with the
      version from:</dd>
</dl>

<blockquote>
  <pre>&lt;base&gt;/templates/makeBaseApp/top/config</pre>
</blockquote>
<dl>
  <dt><tt>RULES_TOP</tt></dt>
    <dd>Remove the rules for creating soft&nbsp; links.</dd>
  <dt><tt>makeDbDepends.pl, makeIocCdCommands.pl, replaceVAR.pl</tt></dt>
    <dd>Copy the versions from&nbsp;
      <tt>&lt;base&gt;/templates/makeBaseApp/top/config</tt></dd>
  <dt><tt>makeSoftLinks</tt></dt>
    <dd>Remove this file</dd>
</dl>

<h4>Changes to xxxApp/src</h4>
Move the following definitions from Makefile.Vx to Makefile.Host:

<blockquote>
  <pre>USER_DBDFLAGS
RECTYPES
DBDEXPAND
DBDNAME
MENUS</pre>
</blockquote>

<h4>Changes to xxxApp/Db</h4>
Rules for DBFROMTEMPLATE and INDDBFROMTEMPLATE no longer exist. See the new
documentation of makeBaseApp for details of what the make rules are for
databases.

<h4>Changes to iocBoot and iocBoot/iocxxx</h4>
iocBoot no longer needs a generated nfs.cmd file

<p>iocBoot/iocxxx no longer contains soft links. Instead the following is
done:</p>
<ul>
  <li>A file cdCommands is generated which provides full path names for
    vxWorks cd commands</li>
  <li>The ld commands just give a file name with no path</li>
  <li>The dbLoadxxx commands must specify "../../xxxApp"</li>
</ul>

<h3>aoRecord</h3>
This did not work properly if DOL&nbsp; is a channel access link that fails. 

<h3>Semaphores</h3>
Most locking semaphores have been changed from semBCreate to semMCreate with
the options : <br>
SEM_DELETE_SAFE|SEM_INVERSION_SAFE|SEM_Q_PRIORITY

<p>A performance test showed that executing</p>

<blockquote>
  <pre>&nbsp;&nbsp;&nbsp; semTake(sem,WAIT_FOREVER);
&nbsp;&nbsp;&nbsp; semGive(bsem);</pre>
</blockquote>
in a 25MHZ mv167 took&nbsp; (4.4 ,7.8) microseonds when
(semBCreate,semMCreate) was used. The extra options as well as allowing a
task to lock recursively are worth the difference in performance. 

<h3>Task Priorities</h3>
The priority of the channel access client for database links was changed from
100 to 68, which makes it lower than all scan tasks but higher than the
sequencer or any channel access tasks.

<h4>cvtDoubleToString</h4>
This was changed to print numbers with precision&lt;=8 and magnitude &lt;1e16
in fixed format with up to 3 digits after the decimal point. As an example if
PREC=1 and a number is 363000000.1 previously it was convetred to

<p>363000000</p>

<p>Now it is converted to</p>

<p>363000000.1</p>

<p>All you RF folks can cheer.</p>

<h3>Access Security</h3>
Previously it was possible to crash an IOC if access security was restarted
after iocInit. This is now fixed. Two major changes were made.
<ol>
  <li>asCaTask is no longer deleted and restarted. Instead it just clears all
    channels and than adds the new channels</li>
  <li>The locking mechanism was changed and made more roibust and easier to
    understand.</li>
  <li>Fixed bug that caused asRegisterClientCallback to fail on UNIX.</li>
  <li>asLib_lex.l changed to allow more characters(like dbLoadxxx)</li>
  <li>Fixed bug that could cause deadlock when an ASG field is changed at run
    time.</li>
</ol>
Access Security now supports macro substitutions. A new vxWorks shell command
is: <br>
&nbsp; 
<ul>
  asSetSubstitutions("var1=sub1,var2=sub2,...")</ul>
See the Application developer's Guide for details about access security.

<h3>tsdefs.h and tsSubr.c</h3>
tsTextToStamp and tsTimeTextToStamp no longer modify the pointer or the
string referenced by pText.

<p>The nextField routines used by tsSubr were moved inside tsSubr.c&nbsp; and
made static routines.</p>

<h3>drvTS</h3>
Checked for Y2K complience. It turns out it was even ok when NTP time
overflows in 2036. However it was modified so that no overflows should occur
while converting between NTP, UNIX, and EPICS epochs. In addition the
conversion of fractions of a second to nanaoseconds was changed and
formatting was changed so that interesting code does not run off right side
of page. Hopefully EPICS base is now fine for Y2K. In fact it should be fine
(as far as time is converned) until the Unix epoch overflows a 32 unsigned
integer in the year 2106. <br>
&nbsp; 

<h3>nextFieldSubr.c</h3>
Removed from base.

<h3>vxWorks</h3>
Base now builds with either vxWorks 5.2 or vxWorks 5.3. The default is to
build vxWorks 5.3. In CONFIG_COMMON a new definition "VX_IS_TORNADO = 1" is
present. If this statemant is commented out then vxWorks 5.2 is assumed.

<h3>makeBaseApp</h3>
Only the perl version is now supported. Due to encouragement from Rozelle
Wright (LANL) and the developers at BESSY, makeBaseApp now uses template
files instead of being one huge ugly perl script.&nbsp; Ralph Lange (BESSY)
made major changes to makeBaseApp. It supports two sets of templates provided
with base (simple and example) as well as templates stored elsewhere. Thus
each site can add new sets of template files. 

<p>See the new WWW documentation on Application Source Release for details</p>

<h3>dbStaticLib</h3>
The include path now supports the unix convention that an empty directory
name means the current directory. Thus the following are OK
<pre>-I nnn::mmm&nbsp;&nbsp;&nbsp; # Current directory is between nnn and mmm
-I :nnn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Current directory is first
-I nnn:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Current directory is last</pre>
The lex grammer was changed so that quoted strings can contain any ascii
character except a quote. A quote itself can be given as the escape sequence
\". This same change was made to dbLoadRecords and dbLoadTemplates.

<p>For all fields in a .db file, a non null string is considered as not the
default.</p>

<p>For winNT the path seperator is a ;</p>

<p>Field attributes (psuedo fields) are now supported. In particular RTYP
(record type) and VERS (version) are now supported. In addition a new request
type DBR_CLASS is supported. See Application Developer's guide for
details.</p>

<h3>Runtime database access</h3>
<ul>
  <li>A new routine dbGetLinkDBFtype is now available. It returns the field
    type of a database link.</li>
  <li>dbNotify was fixed to work correctly for putNotify as well as put.</li>
  <li>scanppl now accepts an argument <tt>rate</tt>. scanpel accepts an
    argument <tt>event_number</tt>.</li>
</ul>

<h3>base.dbd</h3>
<ul>
  <li>Soft raw device support is uncommented.</li>
  <li>Device support for the Allen Bradley SLC is changed.It is now:</li>
</ul>
<pre>#device(ai,AB_IO,devAiAbSlcDcm,"AB-SLC500DCM")&nbsp;
#device(ai,AB_IO,devAiAbSlcDcmSigned,"AB-SLC500DCM-Signed")&nbsp;
#device(ao,AB_IO,devAoAbSlcDcm,"AB-SLC500DCM")&nbsp;
#device(longin,AB_IO,devLiAbSlcDcm,"AB-SLC500DCM")&nbsp;
#device(longout,AB_IO,devLoAbSlcDcm,"AB-SLC500DCM")</pre>

<h3>initHooks</h3>
Changed to support initHookRegister. See Application Developer's Guide for
details. The 3.13.0beta11 version explains the new method. Note that to use
the new the startup file must contain the statement:
<ul>
</ul>
<pre>ld &lt; bin/initHooks.o</pre>
If you have your own version of initHooks.c it should be changed to support
the new features. At a minumum the statement <br>
&nbsp; 
<ul>
</ul>
<pre>void initHooks( int state)</pre>
must be changed to <br>
&nbsp; 
<pre>&nbsp;&nbsp;&nbsp; void initHooks( initHookState state)</pre>

<h3>menuAlarmStat.dbd</h3>
The no alarm string changed from "" to "NO_ALARM"

<h3>Linear Conversion for ai and ao records:</h3>
Before beginning it should be stated that the previous linear conversion
method is still valid.

<p>The following, which is designed by Benjamin Franksen at BESSY, is now the
recommended method:</p>

<p>A new field EOFF exists.&nbsp; The new linear conversion algorithm is
now</p>
<ul>
</ul>
<pre>&nbsp;VAL = AVAL * ESLO + EOFF</pre>
AVAL is the raw value adjusted by ASLO and AOFF.

<p>Thus device support should now compute ESLO and EOFF instead of ESLO and
ROFF.</p>

<p>For example let an ADC be a 16 bits adc with raw values between -32767 and
32767.</p>
<ul>
</ul>
<pre>ESLO = (EGUH - EGUL)/65535.0;
EOFF = 0.0;</pre>
NOTES:
<ul>
  <li>Device support may compute either ROFF or EOFF but not both.</li>
  <li>Record support sets EOFF = EGUL before calling the device init_record.
    This is done so that for old device supports (those that do not set the
    EOFF field) the above formula becomes:
    <ul>
    </ul>
  </li>
</ul>
<pre>VAL = AVAL * ESLO + EGUL</pre>
The original&nbsp; bi-polar adc device support modules added a "bias" to the
raw value so that the raw value is &gt;= 0. When they were written neither
RVAL or EOFF existed. 

<h3>RISC architectures</h3>
Some changes were made to build on RISC architectures. A new include and
source file (adjustment.h and adjustment.c) were created to aid this support.
We can thank Peregrine McGehee for this new support.

<h3>errlog</h3>
This is a replacement for the old code that implemented errMessage,
errPrintf, and epicsPrintf. It provides for multiple system wide error
loggers. The existing iocLog has been modified to use the new code. The new
code supports the old calls and adds some new calls. See Application
Developer's guide&nbsp; for details. <br>
&nbsp; 

<h3>devABSLCDCM</h3>
Changed Scl to Slc wherever this occured. Added support for signed 16 bit
analog values. Stephanie Allison (SLAC) made these changes. <br>
&nbsp; 

<h3>devMpc</h3>
Removed from base.

<h3>devVXStats</h3>
Major rewrite of this routine. It computes the cpu usage via a low priority
taks rather than using spy. It reports file descriptor usage rather than tcp
connections (this is what is actually measures). The format of the INP ,and
OUT fields has changed since the previous version.&nbsp; The new device
definitions are: 
<ul>
</ul>
<pre>device(ai,INST_IO,devAiVXStats,"VX stats")
device(ao,INST_IO,devAoVXStats,"VX stats")</pre>
The INP fields now have the form
<ul>
</ul>
<pre>field(INP,"@memory")
field(INP,"@cpu")
field(INP,"@fd")</pre>
The OUT fields now have the form
<ul>
</ul>
<pre>field(OUT,"@memoryScanPeriod")
field(OUT,"@fdScanPeriod")
field(OUT,"@cpuScanPeriod")</pre>
The source file has comments showing a sample database.

<h3>devSymb</h3>
This has been drastically changed. Look at
&lt;base&gt;/src/dev/symbDev/README for details.

<h3>CA Client Library</h3>
Problems where 3.13.beta11 clients were unable to connect to 3.11 and receive
the correct native type have been fixed. The CPU is now consumed more
efficently by CA tasks waiting in select() under vxWorks. The client lib now
detects an IOC reboot when that reboot is faster that EPICS_CA_CONN_TMO. CA
now runs better on systems without local interface query capabilities
(currently only cygwin32).

<h3>C++ Channel Access Server - CAS</h3>
The constructor for class casPV no longer requires a reference to the server.
For backward compatibility a reference to the server may still be supplied,
but it will not be used. The C++ Portable Channel Access Server Library now
builds on VMS. A really bad bug was fixed in the example directory server
when clients use PV names with ".xxxx" (a field name) in them.

<h3>Global Data Descriptor Class - GDD (only used by the C++ CA server)</h3>
A bug occurring when the primitive type was changed to/from aitSting and the
constructor/destructor member functions for class aitString were not run has
been fixed. A bug occurring when class GDD changed the bounds on the
destination GDD has been fixed. A smart pointer class for GDD was added. This
class automatically maintains the GDD's reference count so that the GDD will
not be deleted until the last smart pointer class pointing to it is deleted.
Moving this responsibility to a class will greatly reduce the probability of
making a mistake in application code.

<h3>WIN32 (PC) Port of EPICS</h3>
Winsock II is now required. This allows CA to properly execute
EPICS_CA_ADDR_LIST=YES. Windows NT 4.0 comes with Winsock II. A properly
functioning Winsock II for Windows 95 can be obtained form
http://www.microsoft.com/windows95/info/ws2.htm. Beware of buggy versions of
Win95 Winsock II that are sometimes installed by 3rd party products. A static
(no EPICS DLLs) build of EPICS on WIN32 is now supported. The EPICS CA
repeater is now automatically started under WIN32 if it isnt running. At Ken
Evans' request GUI programs will this release _not_ allocate a console for
messages from EPICS libraries unless base is compiled with host optimisation
turned off (HOST_OPT=NO). If you would like to see messages from EPICS base
libraries when using an optimised build, then start GUI programs from a DOS
window.

<h3>EPICS Environment Variables that Include Host IP Addresses</h3>
It is now possible to use DNS host names in addition to dotted IP addresses
in EPICS environment variables. All operating systems that have a DNS client
implementation should allow this. Currently only vxWorks does not, and so if
you would like to use real host names instead of dotted IP addresses on
vxWorks you must use the "hostAdd()" function to add host name / IP address
pairs from your system start-up script. For Example: hostAdd
("mercury_dirigible","100.20.30.40") putenv
("EPICS_IOC_LOG_INET=mercury_dirigible")

<h3>GCC 2.8</h3>
The host portions of EPICS now build correctly with GCC 2.8

<h2>Changes between beta4 and beta11</h2>

<h4>Support for win95 and winNT</h4>
Epics base now builds on windows platforms

<h4>GDD and Portable Channel Access Server</h4>
The gdd library and the portable channel access server now build on all
platforms, except SGI and cygwin32, listed above. This also means that C++ is
supported on these platforms.

<h4>Application Developer's Guide</h4>
The chapter "Building IOC Applications" is gone. It is replaced by the
document "EPICS IOC Applications, Building and Source/Release Control". Other
changes are minor. Following is a brief list:
<ul>
  <li>Database Definition: General Rules describes escape sequences</li>
  <li>Record Support: All record support methods that accept DBADDDR * now
    use the routine dbGetFieldIndex instead of comparing addresses. IOn
    addition the get_enum_str routines now use paddr-&gt;pfield as the field
    address instead of the field in the record.</li>
  <li>Runtime Database Access: Gives brief description of DBR_PUT_ACKT and
    DBR_PUT_ACKS. Also describes new routine dbGetPdbaddrFromLink</li>
  <li>The chapter "IOC Initialization" describes how to configure the error
    message logger.</li>
</ul>
<b>NOTE:</b>The initHooks described in the appDevGuide is not in beta11. In
beta11 initHooks is the same as previous releases. The new version will be in
the next release. <br>
&nbsp; <br>
&nbsp; 

<h4>Compiler warning messages:</h4>
All of base except drv/old is now being built with
<ul>
</ul>
<pre>VX_WARN_YES = -Wall -pedantic -ansi</pre>
Most warning messages have now been eliminated. The remaining messages should
not be removed without looking hard at code.

<h4>recSubArray</h4>
get_control_double routine returned incorrect values for fields INDX and NELM.

<h4>devAiStats</h4>
This is now renamed devVXStats. The new device definitions are:
<pre>device(ai,VME_IO,devAiVXStats,"VX stats")
device(ao,VME_IO,devAoVXStats,"VX stats")</pre>
Thus if an application has an old base.dbd and baseLIBOBJS including
definitions for this device support they must be modified.

<h4>SysMon device support</h4>
This is removed from base. It is for APS designed and build VME create system
monitoring. The support code is available from APS if needed. NOTE: In some
beta releases baseLIBOBJS, had an include for devSysmon.o. Applications using
an old version of baseLIBOBJS will not build until this statement is deleted.

<h4>dbToRecordtypeH</h4>
The enums for menus had a comma after last item.

<h4>pulseTrainRecord</h4>
recGblInitConstantLink for sgl was referencing wrong field.

<h4>gphLib</h4>
This did not properly support multiple clients in multi-thread environment.

<h4>dbPvdLib</h4>
Modified to be faster.

<h4>devMz8311</h4>
Use maxCards from module_types.h instead of a #define

<h4>calcRecord</h4>
Allow CALC to be 40 characters. Increase rpbuf from 184 to 200

<h4>mbbiDirectRecord</h4>
Add call to refresh_bits.

<h4>mbbxDirectRecord</h4>
Bx becomes no prompt for mbbi and prompt for mbbo. It was the reverse before.

<h4>calcoutRecord</h4>
A new record type that replaces old wait record. It is like a calc record
with an output and a delay. It makes the wait record obsolete.

<h4>dbAccess</h4>
dbGetPdbAddrFromLink is a new routine. It returns NULL for all except LINK_DB
links, for which it returns the address of the associated DB_ADDR structure.

<h4>escape characters in database files</h4>
dbLoadDatabase, dbLoadRecords, and dbLoadTemplate all allow the standard C
escape sequences in quoted strings. For example a string can contain: "\x00
\27 \t" Thus these sequences pass though the lexical analyzer .

<h4>dbTranslateEscape</h4>
A new routine in libCom. It is used to translate escape sequences. It is
defined in file epicsString.h. It typical place to use this is on parm fields
that contain escape sequences like "\x00 \27 \t".

<h4>Slow booting</h4>
iocs with big databases were taking a long time to boot. It was discovered
that allocating and then freeing small amounts of memeory frequently resulted
in a VERY long memory free list. This is now fixed.

<h4>boRecord, mbboRecord</h4>
init_record now initialized the RVAL field.

<h4>ProcessCallback</h4>
Benjamin Franksen at BESSY reported a serious bug in the routine
ProcessCallback (not used in base). It has been fixed.

<h4>CALC fields</h4>
postfix and calcPerform (used by calcRecord) have been changed so that a 0
byte now ends the postfix expression. Also if postfix detects an illegal
expression it generates a 0 length postfix string. When calcPerform is given
a 0 length string it returns a error status. Thus calcRecord no longer causes
the IOC to crash if an illegal CALC fields is loaded.

<h4>Etc.</h4>
Many other minor problems, bugs, etc. were fixed. <br>

<hr>

<h1>Notes for Release 3.13 of EPICS Base</h1>
<hr>
For Release 3.13 major changes have been made to EPICS base. The IOC
Application Developer's Guide has been extensively modified and now describes
release 3.13. If you are upgrading for a 3.12.xxx or earlier release you must
obtain and read the new App Dev Guide.

<p>In porting EPICS to multiple architectures, the previous method of using
utilities to convert the database definition files to a binary file
(default.dctsdr) caused problems. The problem is that the binary file is
created on one architecture and used on another. This has worked so far for
sun4 and hp hosts combined with motorola 68xxx processors. As support for
more host and more ioc architectures is developed problems are appearing.
This paper describes changes that solve the problems.</p>

<p>Because the changes result in extensive changes to database access, other
changes are also made. The file syntax is changed. The internal database
structures are simplified and also changed to make it easier to support
runtime add/delete of record types and record instances.</p>

<h3>Goals</h3>
<ul>
  <li>Allow database definition without an EPICS generated binary file.</li>
  <li>Change internal database structures so that runtime add/delete of
    record types and record instances is possible.</li>
  <li>Allow each ioc to load and initialize only the record, device, and
    driver support it actually uses.</li>
</ul>

<h3>Backward Compatibility</h3>
<ul>
  <li>Minimal changes to existing record/device/driver support. A section
    below describes necessary changes.</li>
  <li>Provide tools to generate new database files from existing
    default.dctsdr</li>
  <li>No or almost no incompatible changes to the dbStatic API. New
    capabilities are of course allowed.</li>
</ul>

<h3>Incompatibilities</h3>
<ul>
  <li>DCT is no longer supported. A TCL/TK replacement is now available.</li>
  <li>The sdr file format (.database files) is no longer supported.</li>
  <li>The old DCT short form format is no longer supported.</li>
  <li>The only way to load record instance definitions into an ioc is the
    record instance format, which is exactly the same as the GDCT .db
  format.</li>
  <li>Any user written code that accesses internal database structures, i.e.
    any code that uses anything described in Chapter 11 (Database Structures)
    of the old Application Developers Guide will have to be changed.</li>
</ul>

<h2>Overview of new database support</h2>
EPICS defines a set of database file formats. In addition any of these files
can contain include statements. For each ioc, the application developer will
create a set of files specifying the record types, devices, and drivers
needed for that ioc. Normally a master file will be created which consists of
include statements that bring in record, device, and driver definitions.
Default configurations can be provided for new users or for particular
applications.

<p>Database configuration and utility tools access the database via the
static database access library. This library reads the files. It provides
routines for reading the information in the database and for creating and
modifying record instances. Database definition files can be read
incrementally.</p>

<p>Other database configuration tools (capfast, relational database systems,
object oriented databases, etc.) can also be used as long as they generate
record instances in the format described below. In this case, however, it is
still necessary to generate the other files because they are needed by
database access and for record and device support modules.</p>

<p>Tools are provided that generate C code from the database files. Header
files are generated for menu and record type definitions. These header files
are used by record and device support. In addition the record type
definitions contain code which computes field offsets and sizes and record
sizes. This code is compiled by the same cross compiler that is used to
compile other ioc code. Thus cross platform compatibility is achieved.</p>

<p>In order to initialize an ioc, all files needed by that ioc have to be
loaded. It is also necessary to load the record/device/driver support
modules.</p>

<p>Everything is designed so that the following are possible:</p>
<ul>
  <li>It is easy to tailor record/device/driver support individually for each
    ioc.</li>
  <li>It is possible to incrementally add definitions. For example database
    configuration tools do NOT have to load all definitions at startup. New
    definitions can be read at any time. The underlying structures are
    designed so that it is possible to add new definitions after an ioc is
    initialized. Note however that additional changes will be needed after
    this project is complete before on-line add and delete are possible.</li>
  <li>It is possible to completely unbundle record support, device support,
    and driver support. Again work will remain before this is a reality.</li>
</ul>
An additional feature is that, for database configuration tools, record
instance numeric fields and menu fields are stored as character strings. This
solves the following problems.
<ul>
  <li>Rounding problems caused by converting from string to float and then
    back to string disappear.</li>
  <li>For integer fields the user can use the standard c conventions of
    preceding the value with 0x for hex or 0 for octal. Since the string
    itself is stored, the value will always appear with the prefix.</li>
  <li>Macro definitions are allowed.</li>
</ul>
Another feature is is that it is now possible to distinguish link constants
with a value of 0 from links that have never been given a value.

<p>Other changes have been made while the opportunity was available.</p>
<ul>
  <li>The config files have been changed considerably. Base now has it's own
    config directory. Extensions (not implemented) can use the config from
    the version of base against which it is built as well as supply
    additional config files.</li>
  <li>Field names are no longer limited to four characters. It is NOT a good
    idea to use this feature until it has been checked against existing
    channel access clients. If fact it has not been tested at all.</li>
  <li>The record support modules have been renamed from recXxx.c to
    xxxRecord.c. This the name of the database file, include file, and source
    file are the same. Only the extensions are different.</li>
  <li>All files in base/include have been moved to an appropriate base/src
    directory. These files are now installed into base/include.</li>
</ul>

<h2>Database Definition File format</h2>
Formats are defined for the following:
<ul>
  <li>Menu choices.</li>
  <li>Record type description</li>
  <li>Device choice</li>
  <li>Driver choice</li>
  <li>Breakpoint Conversion Table</li>
  <li>Record Instance.</li>
</ul>
See the Application Developer's Guide for details.

<p>The menu choices replace the existing global, record, and conversion
choices. The global and record choices are very similar and thus are easy to
combine. The method of handling the old conversion choices is described
below. That section also describes the breakpoint tables.</p>

<p>The record type description format has been completely changed. It now has
a "real" syntax. It should be MUCH easier to generate new definitions.</p>

<p>The device choice and driver support definitions are defined so that it is
easy to provide incremental definitions.</p>

<p>The record instance format is an extension of the 3.12.beta13 and later
GDCT .db format.</p>

<p>Path and include statements are supported. This provides a powerful tool
for combining definitions from many sources. The path is a unix style path,
i.e. a colon separated list of directory names.</p>

<h2>default.dctsdr conversion tools</h2>
NOTES
<ul>
  <li>In the following default.dctsdr is optional. If not given the tool just
    looks for the file "default.dctsdr" in the current directory.</li>
  <li>All output files are placed in the directory from which the tool is
    executed.</li>
</ul>
The following tools are provided:
<ul>
  <li>sdr2gblmenu [default.dctsdr]</li>
  <br>
  All global menus are written as separate files.
  <ul>
    <li>sdr2recordtype record_type record_type.h [default.dctsdr]</li>
  </ul>
  <br>
  A record type definition file is generated.
  <ul>
    <li>sdr2device [default.dctsdr]</li>
  </ul>
  <br>
  All device definitions are placed in a file called device.dbd
  <ul>
    <li>sdr2driver [default.dctsdr]</li>
  </ul>
  <br>
  All driver definitions are placed in a file called driver.dbd</ul>
For all utilities the required database definition files are generated from a
dctsdr file from a previous epics release. A dctsdr file can be specified or
else the utilities can be run in a directory which contains default.dctsdr
(or a soft link with that name). sdr2recordtype also requires the header file
generated by a previous epics release.

<h2>Conversions - replacement for DBF_CVTCHOICE</h2>
Let's briefly review database conversion, i.e. the LINR field for ai and ao
records.

<p>The allowed conversions are:</p>
<ol>
  <li>None</li>
  <li>Linear</li>
  <li>Breakpoint Tables</li>
</ol>
The main complication results from the breakpoint tables. Previously EPICS
handled breakpoint tables as follows:

<p>The user prepares files in one of two formats: The first is just a list of
"raw value, eng units value". The second format is a file with a header line
followed by a table of raw data values that represent data at equally spaced
engineering unit values. In either case the ascii data is converted to an
internal binary format containing breakpoint tables. This data is part of
default.dctsdr.</p>

<p>Here is how breakpoint table are now handled.</p>
<ul>
  <li>A new file format is defined for breakpoint tables.</li>
  <li>A conversion tool, makeBpt, takes as input the second format described
    above and creates the breakpoint table in the new file format.</li>
  <li>Previously EPICS automatically provided breakpoint tables for
    TypeJdegC, TypeJdegF, TypeKdegC, and TypeKdegF thermocouples. These
    breakpoint tables are part of the new epics base. However there are only
    loaded into an ioc if the user includes their definitions.</li>
  <li>A regular menu definition file menuConvert contains the same
    definitions as choices as that provided by the 3.12.2 version of epics.
    The menu includes definitions for the epics supplied breakpoint
  tables.</li>
  <li>The ai and ao records call a routine cvtRawToEngBpt to perform
    breakpoint conversions. This routine has been rewritten to to look for
    breakpoint tables obtained from the new breakpoint file format.</li>
</ul>
One other comment needs to be made about conversions. The Allen Bradley
device support for the IXE module uses the LINR field in a non standard way.
This was a mistake but compatibility must be maintained. Thus menuConvert
contains a lot of choices used only by the IXE device support.

<h1>Converting existing applications</h1>

<h2>Database Configuration Tools</h2>
<ul>
  <li>DCT - Rather than making major changes to DCT, a TCL/TK replacement has
    been written. The executable is named DCT313.</li>
  <li>GDCT - A new version is provided that supports 3.13. The executable is
    named GDCT313.</li>
  <li>CAPFAST</li>
</ul>
<ul>
  <li>The filter that converts record instance definitions must generate the
    new record instance file format rather than the old short form report.
    Contact Roselle Wright at LANL for details.</li>
  <li>A tool should be developed that, using static database access,
    automatically generates the record type description files used by
    capfast. My guess is that this should be easy to do.</li>
</ul>

<h3>Application Source/Release Control</h3>
At the present time There are at least three Application Source/Release
Control Systems in active use. The old technique of having cat_ascii and
replace_ascii directories no longer work. In addition makesdr no longer
exists. The new system offers developers far more flexibility but it also
means that each Application Source/Release Control system has to be modified
to take advantage of the new capabilities. Again the changes in RULES and
makeBaseApp should make this task easier.

<p>The document "<a
href="http://www.aps.anl.gov/asd/controls/epics/EpicsDocumentation/AppDevManuals/iocAppBuildSRcontrol3_13_0beta12.html">EPICS
IOC Applications: Building and Source/Release Control</a>" describes a
utility makeBaseApp which can be used for small applications. It also
provides guidlines that can be used for large applications.</p>

<h3>Locally developed Record/Device support</h3>
<ul>
  <li>The dctsdr file and any header files for locally developed record types
    must be saved before performing a getrel to a new version of base.</li>
  <li>Any global menus, not supplied with epics, have to be converted via the
    sdr2gblmenu tool. The generated file must be edited to extract the
    locally developed menus.</li>
  <li>Any locally developed record type definitions have to be converted to
    the new ascii file format via the sdr2recordtype tool. Note that the
    generated file also contains definitions for any record specific
  menus.</li>
  <li>New definitions for locally developed device support must be generated
    via the sdr2device tool. The generated file must be edited so that only
    locally developed device support remains.</li>
  <li>New definitions for locally developed driver support must be generated
    via the sdr2driver tool. The generated file must be edited so that only
    locally developed drive support remains.</li>
  <li>If breakpoint tables have been locally developed. The following should
    be done.
    <ul>
      <li>The menuConvert file should be copied from epics and new entries
        for the local breakpoint tables added to the end.</li>
      <li>If raw breakpoint tables were previously used, convert them to the
        new breakpoint format (easy to do). If equally spaced data files were
        used the makeBpt tool can be used to create new breakpoint
      tables.</li>
    </ul>
  </li>
  <li>The following changes must be made to the record support modules:
    <ul>
      <li>The include statement for the record type h file must be surrounded
        by the statements:</li>
    </ul>
  </li>
</ul>
<pre>#define GEN_SIZE_OFFSET

#undef&nbsp; GEN_SIZE_OFFSET</pre>
<ul>
  <li>Any statements that initialize a field from constant links must be
    changed. Such statements always contain the characters "value.value". For
    example:</li>
</ul>
<pre>&nbsp;&nbsp;&nbsp; pai-&gt;simm = pai-&gt;siml.value.value;

is changed to

&nbsp;&nbsp; recGblInitConstantLink(&amp;pai-&gt;siml,DBF_USHORT,&amp;pai-&gt;simm);</pre>
NOTE: This change also has to be made to any device support that manipulates
constant links. Normally this is only soft device support.

<p>Because it is now possible to distinguish between null links (links that
were never given a value) and CONSTANT links with the value 0, the code now
handles initialization of constant links in a uniform manner. Several record
types in previous versions had special code to handle the case of the value 0
for constant links. These have been changed.</p>
<ul>
  <li>If record support uses menus it should be modified to use the enum
    definitions in the generated header files.</li>
  <li>dbStaticLib - Some routines have a new name:</li>
</ul>
<pre>OLD ROUTINE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REPLACEMENT
&nbsp;
dbFindRecdes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbFindRecordType
dbFirstRecdes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbFirstRecordType
dbNextRecdes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbNextRecordType
dbGetRecdesName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbGetRecordTypeName
dbGetNRecdes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbGetNRecordTypes
dbFirstFielddes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbFirstField
dbNextFielddes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbNextField
dbGetChoices&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbGetMenuChoices</pre>
For now the old version will be supported. After one release they will go
away.
<ul>
  <li>New vxWorks CONFIG rules are available to generate menu and record type
    include files from ascii files. The rules are:</li>
</ul>
<pre>&nbsp;&nbsp;&nbsp; MENUS&nbsp;&nbsp;&nbsp; += menuXXX.h
&nbsp;&nbsp;&nbsp; RECTYPES += xxxRecord.h</pre>
<ul>
  <li>Changes to recGbl and database access link routines.</li>
</ul>
<ul>
  <li>recGblInitFastInLink</li>
  <br>
  recGblInitFastOutLink

  <p>All code calling these should be removed. They are no longer needed.</p>
  <li>recGblGetFastLink</li>
  <br>
  recGblPutFastLink <br>
  dbFastLinkGet <br>
  dbFastLinkPut <br>
  recGblGetLinkValue <br>
  recGblPutLinkValue

  <p>These are replaced by <br>
  dbGetLink dbPutLink</p>
</ul>
<pre>long dbGetLink(struct db_link *,short dbrType,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void *pbuffer,long *options,long *nRequest);</pre>
The last two arguments can be 0. options=0 means no options. nRequest=0 means
scalar, i.e. retrieve one value.
<pre>long dbPutLink(struct db_link *,short dbrType,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void *pbuffer,long nRequest);</pre>
<ul>
  <li>dbCaAddInLink</li>
</ul>
<br>
dbCaAddOutlink <br>
dbCaGetLink <br>
dbCaPutLink

<p>The Add routines are no longer needed. The Get/Put routines are replaced
by dbGetLink/dbPutLink.</p>
<ul>
  <li>link.h</li>
</ul>
<br>
All parm fields are now declared char * parm rather than char parm[<size>] In
addition the defines INSTIO_FLD_SZ to VXI_PARAM_SZ no longer exist. This is
done so that unused links now use less storage.

<h1>Record Instance Definitions</h1>

<h4>Convert to proper format</h4>
All record instances must be capable of being loaded into an ioc via
dbLoadDatabase, dbLoadRecords, or dbLoadTemplate. This is the same format
that dbLoadRecords and dbLoadTemplate used in 3.12 releases. Note that if any
files contain the statements:
<pre>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; database(x) { nowhere() {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }

or

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; database(x) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</pre>
These statements must be removed. They were in pre 3.12 releases.

<h4>CONSTANT Links with value "0"</h4>
Release 3.13 is now capably of distingushing between a null link (a link that
is not given any value at all) and a constant link with the value 0. This
cause problems for some old record instance files. For example if a record
instance is defined as:
<pre>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; record(fanout,name) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; field(SELN,"1")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; field(SELL,"0")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</pre>
Such definitions can be fixed by either completly removing the link
definition or changing the value from "0" to "".

<p>here is a complete list of record types and fields that may have this
problem:</p>
<ul>
  <li>fanoutRecord
    <ul>
      <li>SELL -&gt; SELN Note SELN is not a prompt field.</li>
    </ul>
  </li>
  pulseCounterRecord
  <ul>
    <li>SGL -&gt; SGV</li>
  </ul>
  pulseDelayRecord
  <ul>
    <li>STL -&gt; STV</li>
    <li>GLNK -&gt; GATE</li>
  </ul>
  pulseTrainRecord
  <ul>
    <li>SGL -&gt; HGV</li>
    <br>
    NOTE: This is a bug. The field should be SGV. Fixed 3.13.beta5.</ul>
  selRecord
  <ul>
    <li>INPA -&gt; A NOTE A is not a prompt field</li>
    <li>INPB -&gt; B NOTE B is not a prompt field</li>
    <li>... for all INP links</li>
  </ul>
  seqRecord
  <ul>
    <li>SELL -&gt; SELN NOTE SELN is not a prompt field</li>
  </ul>
  stringinRecord
  <ul>
    <li>SIOL -&gt; SVAL NOTE SVAL is not a prompt field</li>
  </ul>
  stringoutRecord
  <ul>
    <li>DOL -&gt; VAL</li>
  </ul>
</ul>
A good way to find these problems is to use grep. For example:
<pre>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grep SELL */*.db</pre>
This assumes that you are in directory that contains subdirectorys containing
.db files.

<h1>IOC Startup files</h1>
The command dbLoad is no longer supported. The new method is to issue one or
more dbLoadDatabase commands and any combination of dbLoadRecords and
dbLoadTemplate commands.

<h2>Other Release Notes</h2>

<h4>IOC Test routines</h4>
Many changes have been made to the EPICS ioc test routines, i.e., routines
given to the vxWorks shell. Please read the chapter "IOC Test Facilities" in
the Application Developer's Guide for details.

<h4>Changes to Record and Device Support</h4>
<ul>
  <li>Changes to record support modules (caused by looking for UDF problems)
    <ul>
      <li>aaiRecord, aaoRecord - The siol field, which was never used in
        record processing, has been removed from aaiRecord.dbd and
        aaoRecord.dbd files. Old style, pre R3.12, c code in init_record was
        updated.</li>
      <li>compressRecord - Now allows Channel Access links for INP. It also
        sets READ_ALARM if it has bad or no input.</li>
      <li>dfanoutRecord, longoutRecord - In process the udf field is set to
        false when dbGetLink returns success only if dol is not a constant
        link.</li>
      <li>fanoutRecord - Now supports CA links. Same rules as FLNK.</li>
      <li>biRecord, mbbiRecord - Udf now set to false in put_enum_string when
        val is initialized.</li>
      <li>mbbiDirectRecord - Udf now set to false in process when val is
        initialized.</li>
      <li>mbbiDirectRecord, mbboDirectRecord, waitRecord - Old style, pre
        R3.12, c code in init_record was updated.</li>
      <li>pidRecord - Changes made to modify DB_LINK test on cvl field to
        allow type CA_LINK.</li>
      <li>pulseDelayRecord - Removed code that called recGblSetSevr is status
        non zero just before return. process always returns 0.</li>
      <li>pulseTrainRecord - process always returns 0.</li>
      <li>seqRecord - Changes made to modify DB_LINK tests on the lnk and dol
        fields to allow type CA_LINK.</li>
      <li>steppermotorRecord - In process the udf field is now set to false
        if dol is not a constant link and dbGetLink returns success. Changes
        made to modify DB_LINK test on rdbl field to allow type CA_LINK.</li>
      <li>stringoutRecord - In process the udf field is now set to false if
        dol is not a constant link and dbGetLink returns success.</li>
      <li>waveform record - While processing the udf field is now set to
        false if simulation mode is TRUE and siol is not a constant link and
        dbGetLink returns success.</li>
    </ul>
  </li>
  <li>Device Support Changes
    <ul>
      <li>devAiSoft, devBiSoft, devEventSoft, devLiSoft, devMbbiDirectSoft
        devMbbiSoft,devSiSoft - In init_record the udf field is set to false
        only if inp is a constant link and recGblInitConstantLink returns
        success. In read_xxx the udf field is set to false only if inp is not
        a constant link and dbGetLink returns success.</li>
      <li>devAiSoftRaw, devBiSoftRaw, devMbbiDirectSoftRaw, devMbbiSoftRaw -
        In init_record the udf field is no longer set to false if inp is a
        constant link and recGblInitConstantLink returns success (rval, not
        val, was successfully initialized).</li>
      <li>devLoSoft, devLoSymb, devMbboDirectSoft, devMbboSoft, devPtSoft,
        devSoSymb - The udf field is no longer set to false in write_xxx.</li>
      <li>devHistogramSoft, devHistogramTestAsyn - In init_record the udf
        field is set to false only if svl is a constant link and
        recGblInitConstantLink returns success.</li>
    </ul>
  </li>
</ul>

<h4>Make rules and config files</h4>
The config environment has been extensively changed. BASE now has its own set
of config files. Extensions will be able to use the base config files (for
the version of base it is built against) and add it's own definitions.
Changes to extensions will come at a future time.

<h4>GNU C++ for base</h4>
It is now possible to compile 3.13 EPICS base with the gnu C and C++
compilers. A C++ compiler that properly supports templates is required to
build the new ca server and the gdd library.

<h4>log server</h4>
Thanks to William Lupton at KECK the log server will now (under the latest
EPICS 3.13) obtain a new directory for the log file in response to SIGHUP.

<h4>CA repeater fix</h4>
Thanks to Kim Gillies, Bret Goodrich, and others at NOAO a problem has been
discovered and fixed in the 3.12 CA repeater under solaris.

<h4>Portable CA server</h4>
A new CA server C++ class library is available. The server library is in
libcas.a. The API is described in casdef.h. Doc is in progress. An example
server tool can be found at base/src/cas/example. The server has been tested
under sunos4 and solaris. A multi-threaded version of the new server for
vxWorks is in progress.

<h4>Macro Substitution Library</h4>
The macro substitution library discussed in tech-talk is now part of epics
base. Thus was contributed by Bill Lupton. The static database library uses
this library. dbLoadRecords and dvbLoadTemplate also use it.

<h4>VXI Resource Manager fix</h4>
Thanks to Ric Claus of SLAC a bug has been isolated in the VXI resource
manager. <br>
Symptom: correct slot isnt located when EPICS_VXI_LA_BASE is set to something
other than zero.

<h4>Access Security</h4>
If asSetFile has been set in a startup file and access security
initialization fails, then iocInit returns -1 so that startup file does not
finish.

<h4>errPrintf</h4>
On Unix this now calls fprintf(stderr instead of printf

<h4>iocLogClient.c</h4>
This now calls printf instead of epicsPrintf to prevent deadlocks.

<h4>Native type for DBF_USHORT</h4>
Formerlly old database access, which does not have unsigned short called the
native type DBR_FLOAT. It now calls it DBF_LONG

<h4>Allen Bradley Driver</h4>
Analog Output Block Transfers were being requested too frequently

<p>If link_status command fails (3 times in succession) adapters are now
immediatly declared down.</p>

<p>For btRead and btWrite, The driver now enforces a timeout of 5 seconds
which is 1 second more than scanner itself enforces. This is so that if
scanner throws away a BT request it will still timeout.</p>

<p>For btRead and btWrite is is no longer permissible to issue a new btRead
or btWrite from tha callback routine.</p>

<p>The on line doc has the following two changes:</p>
<ul>
  <li>abConfigBaud has arguments (link,number) (Old doc was wrong)</li>
  <li>Now states that new btRead/btWrite can NOT be ussued from callback.</li>
</ul>

<h4>vmic2534</h4>
Support has been added by LBL. It still needs to be ansified.

<h4>New options for links</h4>
<ul>
  <li>FWDLINK</li>
</ul>
<br>
A forward link now works between IOCs but only if the field is PROC. When
recGblFwdLink is executed, a 1 is written.
<ul>
  <li>OUTLINK new option CA (In addition to PP and NPP)</li>
</ul>
<br>
CA means always make it channel access link
<ul>
  <li>INLINK new options CA CP CPP (In addition to PP and NPP)</li>
</ul>
<ul>
  <li>CA means always make it a channel access link</li>
  <li>CP means CA + process when monitor occurs</li>
  <li>CPP means CA + process passive records when monitor occurs</li>
</ul>
dbAccess (dbGetField dbPutField) make sure that link field strings are not
longer than 39 characters. They allow M for MS and N for NMS

<h4>callback and scan task names</h4>
The task names have been changed to make them unique

<h4>dbPutString</h4>
If the strlen of the new field is &gt;= field_size an error is returned.

<h4>event scanned records</h4>
Multiple priorities are now supported. <br>
WARNING: Default PRIO is low thus old event scanned records may be executed
at a lower priority then previous release.

<h4>Allen Bradley Stepper Motor Support (Ric Claus SLAC)</h4>
Support for the allen bradley stepper motor is available. See the APS EPICS
Hardware Support page for details.

<h4>initHooks</h4>
INITHOOKafterCaLinkInit1 is replaced by INITHOOKafterCaLinkInit <br>
INITHOOKafterCaLinkInit2 no longer exists</body>
</html>
